# list comprehension expression

# 请问如何将列表中的每一个元素的值都变成原来的 2 倍呢？

# 遍历方法
oho = [1,2,3,4,5]
for i in range(len(oho)) :
    oho[i] = oho[i] * 2
print(oho) # [2, 4, 6, 8, 10]

# 使用列表推导式
oho = [1,2,3,4,5]
oho = [i * 2 for i in oho]
print(oho) # [2, 4, 6, 8, 10]

# 语法 expression for target in iterable
x = [i for i in range(10)]
print(x) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

x = [i + 1 for i in range(10)]
print(x) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

x = []
for i in range(10) :
    x.append(i + 1)
print(x) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

y = [c * 2 for c in "FishC"]
print(y) # ['FF', 'ii', 'ss', 'hh', 'CC']

# 将字符串的每个字符转换为unicode编码
# 函数 ord(c) 将字符转换为编码
code = [ord(c) for c in "FishC"]
print(code) # [70, 105, 115, 104, 67]

matrix = [
    [1,2,3],
    [4,5,6],
    [7,8,9]
]
# 通过推导式将矩阵的第二列的元素提取出来
col2 = [row[1] for row in matrix] # 分析：通过语句 for row in matrix 取到每一行，然后通过表达式 row[1] 取每一行的第二个元素
print(col2) # [2, 5, 8]

# 获取主对角线上的元素（左上角到右下角）
diag = [matrix[i][i] for i in range(len(matrix))] 
# 这一次循环中，每次拿到的是矩阵的索引值，依次 0,1,2,真正得到的值依次 matrix[0][0],matrix[1][1],matrix[2][2]
print(diag) # [1, 5, 9]

# 获取 左下角到右上角 主对角线上的元素
diag = [matrix[len(matrix) - 1 - i][i] for i in range(len(matrix))] 
# 这一次循环中，每次拿到的是矩阵的索引值，依次 0,1,2,真正得到的值依次 matrix[2][0],matrix[1][1],matrix[2][0]
print(diag) # [7, 5, 3]